package frsf.cidisi.exercise.tp.search;

import java.util.ArrayList;
import componentes.Aldea;
import componentes.Mapa;
import componentes.Tesoro;

import frsf.cidisi.faia.state.EnvironmentState;

/**
 * This class represents the real world state.
 */
public class Isla_Emicere_State extends EnvironmentState {
	
	//TODO: Setup Variables
    private Mapa world;
    private Aldea pos_agente;
	
    public Isla_Emicere_State() {
        
    	world= new Mapa();
    	
        this.initState();
    }

    /**
     * This method is used to setup the initial real world.
     */
    @Override
    public void initState() {

    	world.inicializar_mapa_con_tesoros();
    	pos_agente= world.getInicial();
    }

    /**
     * String representation of the real world state.
     */
    @Override
    public String toString() {
        String str = "";
 
        
        str = str + "\nEl agente se encuentra en la aldea:  " + pos_agente.getNombre() + " \n";
        
        for(int i=0; i<world.getListaAldeas().size(); i++){
        	str = str + "	Aldea: " + world.getListaAldeas().get(i).getNombre() + ", valor del cofre: " + world.getListaAldeas().get(i).getTesoro().getValor_cofre() + "\n";
        	
        }
        
        str = str + "Aldea  Inicial: " + world.getInicial().getNombre() + "\n";
        str = str + "Aldea  Final: " + world.getFinal().getNombre() + "\n";
       

        return str;
    }

	
    // The following methods are agent-specific:
	
     public Mapa getworld(){
        return world;
     }
     public void setworld(Mapa arg){
        world = arg;
     }
     public Aldea getpos_agente(){
        return pos_agente;
     }
     public void setpos_agente(Aldea arg){
        pos_agente = arg;
     }

	public Tesoro getTesoro() {
		return pos_agente.getTesoro();
		
	}

	public ArrayList<Aldea> getAldeas() {
		
		return world.getListaAldeas();
	}

	public void borrarTesoro(Aldea nombre_aldea) {

		Tesoro tesoro_aux;

		tesoro_aux = new Tesoro();
    	tesoro_aux.setContenido(0, 0, 0, 0, 0, 0, 0);

    	world.getAldea(nombre_aldea.getNombre()).setTesoro(tesoro_aux);
	}

	public void ejecutarPirata() {
		
		int num_ramdom = (int) Math.floor(Math.random()*(0-9+1)+9);   
		
		if(num_ramdom <= 5 ){
			int aldea_ramdom = (int) Math.floor(Math.random()*(0-10+1)+10); 
			
					
			if(world.getListaAldeas().get(aldea_ramdom).getTesoro().getValor_cofre()!=0){
				this.world.getListaAldeas().get(aldea_ramdom).setTesoro(new Tesoro(0, 0, 0, 0, 0));
				System.out.println(">>>>>>> El pirata robo completamente el tesoro de la aldea: " + world.getListaAldeas().get(aldea_ramdom).getNombre() +" <<<<<<<<" );
			}
			else{
				System.out.println(">>>>>>> No pude robar el tesoro de la aldea: " + world.getListaAldeas().get(aldea_ramdom).getNombre() +"  :( <<<<<<<<" );
			}
			
			
		}
		
	}
	

}

